package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func producer(ch1 chan int) {
	defer wg.Done()

	for i := 0; i < 10; i++ {
		ch1 <- i
	}

	// 用完将 chan 关闭，chan关闭后，不可以写，但是还可以读
	close(ch1)
}

func consumer(ch2 chan int) {
	defer wg.Done()

	// for i := 0; i < 10; i++ {
	// 	x := <-ch2
	// 	fmt.Println(x)
	// }

	for {
		x, ok := <-ch2
		if !ok {
			break
		}

		fmt.Println(x)
	}
}

func main() {

	wg.Add(2)

	ch1 := make(chan int, 3)

	go producer(ch1)

	go consumer(ch1)

	wg.Wait()

	fmt.Println("channel finish")
}
